package com.crane.oss.sys.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.crane.common.core.dto.SessUser;
import com.crane.oss.sys.bean.request.user.*;
import com.crane.oss.sys.bean.resp.PartyBean;
import com.crane.oss.sys.bean.resp.UserBean;
import org.springframework.web.bind.annotation.RequestBody;

import javax.validation.Valid;
import java.util.Set;

/**
 * @author bealon
 * @email ccsu123456@qq.com
 * @date 2018年12月28日 12时22分23秒
 */
public interface UserService {

    /**
     * 用户登录
     *
     * @param username
     * @param password
     * @param hostName
     * @return
     * @
     */
    UserBean userLogin(String username, String password, String hostName);

    /**
     * 查询用户的所有权限
     *
     * @param opUser 用户ID
     */
    Set<String> queryAllPerms(SessUser opUser);

    /**
     * 查询用户信息
     *
     * @param userId
     * @return
     * @
     */
    UserBean queryUser(Long opPartyId, Long userId);

    /**
     * 查询用户列表
     *
     * @param request
     * @return
     * @
     */
    IPage<UserBean> queryList(QueryUserRequest request);
    /**
     * 保存用户
     *
     * @param request
     * @return
     * @
     */
    Long save(AddUserRequest request);

    /**
     * 添加其他机构用
     * @param userName
     * @return
     */
    boolean addUser(String userName,Long opPartyId);
    /**
     * 修改密码
     *
     * @param username 用户ID
     */
    void updatePassword(String username, UpdateUserPassWordRequest request);

    /**
     * 修改用户状态
     * @param request
     */
    void updateState(UpdateUserStateRequest request);

    /**
     * 忘记用户密码
     *
     * @param request
     * @
     */
    void forgetPassword(ForgetUserPassWordRequest request);

    /**
     * 修改用户
     *
     * @param request
     * @return
     * @
     */
    void update(UpdateUserRequest request);

    /**
     * 删除用户
     *
     * @param userId
     * @param opPartId
     * @return
     * @
     */
    void delete(Long userId, Long opPartId);

    /**
     * 操作人和被操作人必须是同一机构或者上下级关系
     *
     * @param checkPartyId 当前人机构id
     * @param userId  被操作人
     * @param flag    true 同一机构  false 上下级，或者同一机构
     * @
     */
    PartyBean validateUserRight(Long checkPartyId, Long userId, Boolean flag);

    /**
     * 根据用户名查询用户
     *
     * @param userName
     * @return
     * @
     */
    UserBean queryUserByName(String userName);

    /**
     * 根据用户名查询用户
     *
     * @param userId
     * @return
     * @
     */
    UserBean queryUserById(Long userId);


    UserBean queryUserByMobile(String mobile,String password);


    String getUserName(String realName);
}
